package com.doordu.soa.service.comm.redis;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.util.Assert;

import com.doordu.soa.service.comm.constant.Constant;

@SuppressWarnings("unchecked")
public class RedisDoorduTemplate {
	private static final Logger log = LoggerFactory.getLogger(RedisDoorduTemplate.class);
	
	

	@SuppressWarnings("rawtypes")
	@Autowired
	RedisTemplate jedisTemplate;
	
	private String _redisKeyPrefix = "";//operator_ 由于可能调用其他系统的缓存 ,故不再统一自动添加.而由调用方自主决定.
    @SuppressWarnings("rawtypes")
    private RedisSerializer keySerializer = new StringRedisSerializer();

	/***
	 * redis key 的通用前缀,系统内所有redis值都会加这个前缀, 警告:设置这个值将影响所有redis调用.应该设置为空.
	 * @return
	 */
	public String getRedisKeyPrefix() {
		return _redisKeyPrefix;
	}

    /***
	 * redis key 的通用前缀,系统内所有redis值都会加这个前缀, 警告:设置这个值将影响所有redis调用.应该设置为空.
	 * @return
	 */
	public void setRedisKeyPrefix(String _redisKeyPrefix) {
		this._redisKeyPrefix = _redisKeyPrefix;
	}

	/***
	 * 在传递的key前添加 {@code Constant.REDIS_PREFIX}
	 * @param rkey
	 * @return
	 */
	public String addPrefix(String rkey){
		return Constant.REDIS_PREFIX+rkey;
	}

	/***
	 * 给所有操作的key 加固定的前缀.
	 * @param key
	 * @return
	 */
	private String maskKey(String key){
		if(StringUtils.isNotBlank(_redisKeyPrefix)){
			return this._redisKeyPrefix+":"+key;
		}
		return key;
	}

    /**
	 * 设置单个值
     *
     *
     * @param key
	 * @param value
	 * @return
	 */

	public <T> T set(String key, T value) {
		ValueOperations<String, T> svo = jedisTemplate.opsForValue();
		try {
			//byte[] v = keySerializer.serialize(value);
			svo.set(maskKey(key), value);
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		} finally {
		}
		return value;
	}
	
	/**
	 * 获取单个值
	 * 注意:所有整数类型都将转换为Long类型.
	 * @param <T>
     *
     * @param key
	 * @return
	 */
	public <T> T get(String key) {
		T result = null;
		ValueOperations<String, T> svo = jedisTemplate.opsForValue();

		try {
			Object obj = svo.get(maskKey(key));

			if(obj == null){
				return null;
			}

			if(obj.getClass() == Integer.class
					|| obj.getClass() == Short.class
					){
				result = (T)(Long.valueOf(obj.toString()));
				return result;
			}else{
				result = (T)obj;
			}

		} catch (Exception e) {
			log.error(e.getMessage(), e);

		} finally {

		}
		return result;
	}

    public void delete(String key){
		jedisTemplate.delete(maskKey(key));
	}

	public Boolean exists(String key) {
		Boolean result = false;
		Object obj = get(key);

		try {
			result = obj != null;
		} catch (Exception e) {
			log.error(e.getMessage(), e);

		} finally {

		}
		return result;
	}

	/**
	 * 在某段时间后失效
     *
     * @param key
	 * @param unixTime
	 * @return
	 */
	public Long expire(String key, int seconds) {

		try {
			jedisTemplate.expire(maskKey(key), seconds, TimeUnit.SECONDS);

		} catch (Exception e) {
			log.error(e.getMessage(), e);
		} finally {

		}

		return (long) seconds;
	}

    /**
	 * 在某个时间点失效
     *
     * @param key
	 * @param unixTime
	 * @return
	 */
	public boolean expireAt(String key, Date time) {
		boolean flag = false;
		try {
			flag = jedisTemplate.expireAt(maskKey(key), time);

		} catch (Exception e) {
			log.error(e.getMessage(), e);

		} finally {

		}
		return flag;
	}
	
	private byte[] rawKey(Object key) {
		Assert.notNull(key, "non null key required");
		if ( key instanceof byte[]) {
			return (byte[]) key;
		}
		return keySerializer.serialize(key);
	}

	public Long decrBy(String key, long value) {
		Long result = null;
		
		final byte[] rawKey = rawKey(maskKey(key));
		
		try {
			result = (Long) jedisTemplate.execute(new RedisCallback<Long>() {

				public Long doInRedis(RedisConnection connection) {
					return connection.decrBy(rawKey, value);
				}
			}, true);

		} catch (Exception e) {
			log.error(e.getMessage(), e);

		} finally {

		}
		return result;
	}

	public Long decr(String key) {
		return decrBy(key,1);
	}

	public Long incrBy(String key, long value) {
		Long result = null;
		
		final byte[] rawKey = rawKey(maskKey(key));
		
		try {
			result = (Long) jedisTemplate.execute(new RedisCallback<Long>() {

				public Long doInRedis(RedisConnection connection) {
					return connection.incrBy(rawKey, value);
				}
			}, true);

		} catch (Exception e) {
			log.error(e.getMessage(), e);

		} finally {

		}
		return result;
	}

	public Long incr(String key) {
		
		return incrBy(key, 1);
	}
	
	public void ladd(String key,Object...t){
		ListOperations<String, Object> lo = jedisTemplate.opsForList();
		lo.rightPushAll(maskKey(key), t);
	}
	
	public void lremove(String key,Object t){
		ListOperations<String, Object> lo = jedisTemplate.opsForList();
		lo.remove(maskKey(key), 0, t);
	}
	
	public long lsize(String key){
		ListOperations<String, Object> lo = jedisTemplate.opsForList();
		return lo.size(maskKey(key));
	}
	
	public <T> List<T> lget(String key,long start,long end){
		ListOperations<String, T> lo = jedisTemplate.opsForList();
		List<T> list = lo.range(maskKey(key), start, end);
		return list;
	}
	
	public <T> void hset(String key,String name,T t){
		HashOperations<String, String, T> ho = jedisTemplate.opsForHash();
		ho.put(maskKey(key), name, t);
	}
	
	public <T> List<T> hmget(String key,String... names){
		return hmget(key,Arrays.asList(names));
	}
	
	public <T> List<T> hmget(String key,List<String> names){
		HashOperations<String, String, T> ho = jedisTemplate.opsForHash();
		List<T> t = ho.multiGet(maskKey(key), names);
		
		return t;
	}
	
	/***
	 * 返回整个MAP
	 * @param key
	 * @return
	 */
	public <T> Map<String,T> hget(String key){
		HashOperations<String, String, T> ho = jedisTemplate.opsForHash();
		Map<String,T> map = ho.entries(maskKey(key));
		
		return map;
	}
	
	
	/***
	 * 原子增加HASH里的值
	 * @param key hash 在redis 里的key
	 * @param name hash内的 key
	 * @param d 增量
	 * @return
	 */
	public Long hincr(String key,String name,Long d){
		HashOperations<String, String, Long> ho = jedisTemplate.opsForHash();
		return ho.increment(maskKey(key), name, d);
	}
	

	public void hremove(String key,String...keys){
		HashOperations<String, String, Object> ho = jedisTemplate.opsForHash();
		ho.delete(maskKey(key), keys);
	}
	
	
	/**
	 * 按照指定前缀查询key列表.注意不要返回大结果集,避免压力过大.
	 * @param key
	 * @return
	 */
	public Set<String> keys(String key){
		if(key == null){
			key = "";
		}
		if(key.indexOf("*") == -1){//如果没有匹配符.默认后面加
			key += "*";
		}
		
		 Set<String> keyNames = jedisTemplate.keys(key);
		return keyNames;
	}

    public long sadd(String key, Object value) {
        SetOperations<String, Object> set_op = jedisTemplate.opsForSet();
        return set_op.add(key, value);
    }

    public long srem(String key, Object member) {
        SetOperations<String, Object> set_op = jedisTemplate.opsForSet();
        return set_op.remove(key, member);
    }

    public long scard(String key) {
        SetOperations<String, Object> set_op = jedisTemplate.opsForSet();
        return set_op.size(key);
    }

    public boolean ismember(String key, Object member) {
        SetOperations<String, Object> set_op = jedisTemplate.opsForSet();
        return set_op.isMember(key, member);
    }
//
//	public Long append(String key, String value) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.append(key, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String substr(String key, int start, int end) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.substr(key, start, end);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long hset(String key, String field, String value) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.hset(key, field, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String hget(String key, String field) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.hget(key, field);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long hsetnx(String key, String field, String value) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.hsetnx(key, field, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String hmset(String key, Map<String, String> hash) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.hmset(key, hash);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public List<String> hmget(String key, String... fields) {
//		List<String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.hmget(key, fields);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long hincrBy(String key, String field, long value) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.hincrBy(key, field, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Boolean hexists(String key, String field) {
//		Boolean result = false;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.hexists(key, field);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long del(String key) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.del(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long hdel(String key, String field) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.hdel(key, field);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long hlen(String key) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.hlen(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<String> hkeys(String key) {
//		Set<String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.hkeys(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public List<String> hvals(String key) {
//		List<String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.hvals(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Map<String, String> hgetAll(String key) {
//		Map<String, String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.hgetAll(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	// ================list ====== l表示 list或 left, r表示right====================
//	public Long rpush(String key, String string) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.rpush(key, string);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long lpush(String key, String string) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.lpush(key, string);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long llen(String key) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.llen(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public List<String> lrange(String key, long start, long end) {
//		List<String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.lrange(key, start, end);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String ltrim(String key, long start, long end) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.ltrim(key, start, end);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String lindex(String key, long index) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.lindex(key, index);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String lset(String key, long index, String value) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.lset(key, index, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long lrem(String key, long count, String value) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.lrem(key, count, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String lpop(String key) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.lpop(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String rpop(String key) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.rpop(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	// return 1 add a not exist value ,
//	// return 0 add a exist value
//	public Long sadd(String key, String member) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.sadd(key, member);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<String> smembers(String key) {
//		Set<String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.smembers(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long srem(String key, String member) {
//		ShardedJedis shardedJedis = getRedisClient();
//
//		Long result = null;
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.srem(key, member);
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String spop(String key) {
//		ShardedJedis shardedJedis = getRedisClient();
//		String result = null;
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.spop(key);
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long scard(String key) {
//		ShardedJedis shardedJedis = getRedisClient();
//		Long result = null;
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.scard(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Boolean sismember(String key, String member) {
//		ShardedJedis shardedJedis = getRedisClient();
//		Boolean result = null;
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.sismember(key, member);
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String srandmember(String key) {
//		ShardedJedis shardedJedis = getRedisClient();
//		String result = null;
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.srandmember(key);
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zadd(String key, double score, String member) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.zadd(key, score, member);
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<String> zrange(String key, int start, int end) {
//		Set<String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.zrange(key, start, end);
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zrem(String key, String member) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.zrem(key, member);
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Double zincrby(String key, double score, String member) {
//		Double result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zincrby(key, score, member);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zrank(String key, String member) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrank(key, member);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zrevrank(String key, String member) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrank(key, member);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<String> zrevrange(String key, int start, int end) {
//		Set<String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrange(key, start, end);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<Tuple> zrangeWithScores(String key, int start, int end) {
//		Set<Tuple> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrangeWithScores(key, start, end);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<Tuple> zrevrangeWithScores(String key, int start, int end) {
//		Set<Tuple> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrangeWithScores(key, start, end);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zcard(String key) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zcard(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Double zscore(String key, String member) {
//		Double result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zscore(key, member);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public List<String> sort(String key) {
//		List<String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.sort(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public List<String> sort(String key, SortingParams sortingParameters) {
//		List<String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.sort(key, sortingParameters);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zcount(String key, double min, double max) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zcount(key, min, max);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<String> zrangeByScore(String key, double min, double max) {
//		Set<String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrangeByScore(key, min, max);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<String> zrevrangeByScore(String key, double max, double min) {
//		Set<String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrangeByScore(key, max, min);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<String> zrangeByScore(String key, double min, double max, int offset, int count) {
//		Set<String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrangeByScore(key, min, max, offset, count);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<String> zrevrangeByScore(String key, double max, double min, int offset, int count) {
//		Set<String> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrangeByScore(key, max, min, offset, count);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<Tuple> zrangeByScoreWithScores(String key, double min, double max) {
//		Set<Tuple> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrangeByScoreWithScores(key, min, max);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<Tuple> zrevrangeByScoreWithScores(String key, double max, double min) {
//		Set<Tuple> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrangeByScoreWithScores(key, max, min);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<Tuple> zrangeByScoreWithScores(String key, double min, double max, int offset, int count) {
//		Set<Tuple> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrangeByScoreWithScores(key, min, max, offset, count);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<Tuple> zrevrangeByScoreWithScores(String key, double max, double min, int offset, int count) {
//		Set<Tuple> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrangeByScoreWithScores(key, max, min, offset, count);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zremrangeByRank(String key, int start, int end) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zremrangeByRank(key, start, end);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zremrangeByScore(String key, double start, double end) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zremrangeByScore(key, start, end);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long linsert(String key, LIST_POSITION where, String pivot, String value) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.linsert(key, where, pivot, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String set(byte[] key, byte[] value) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.set(key, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public byte[] get(byte[] key) {
//		byte[] result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.get(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Boolean exists(byte[] key) {
//		Boolean result = false;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.exists(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String type(byte[] key) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.type(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long expire(byte[] key, int seconds) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.expire(key, seconds);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long expireAt(byte[] key, long unixTime) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.expireAt(key, unixTime);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long ttl(byte[] key) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.ttl(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public byte[] getSet(byte[] key, byte[] value) {
//		byte[] result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.getSet(key, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long setnx(byte[] key, byte[] value) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.setnx(key, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String setex(byte[] key, int seconds, byte[] value) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.setex(key, seconds, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long decrBy(byte[] key, long integer) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.decrBy(key, integer);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long decr(byte[] key) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.decr(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long incrBy(byte[] key, long integer) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.incrBy(key, integer);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long incr(byte[] key) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.incr(key);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long append(byte[] key, byte[] value) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.append(key, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public byte[] substr(byte[] key, int start, int end) {
//		byte[] result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.substr(key, start, end);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long hset(byte[] key, byte[] field, byte[] value) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.hset(key, field, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public byte[] hget(byte[] key, byte[] field) {
//		byte[] result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.hget(key, field);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long hsetnx(byte[] key, byte[] field, byte[] value) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.hsetnx(key, field, value);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String hmset(byte[] key, Map<byte[], byte[]> hash) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.hmset(key, hash);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public List<byte[]> hmget(byte[] key, byte[]... fields) {
//		List<byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.hmget(key, fields);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long hincrBy(byte[] key, byte[] field, long value) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.hincrBy(key, field, value);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Boolean hexists(byte[] key, byte[] field) {
//		Boolean result = false;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.hexists(key, field);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long hdel(byte[] key, byte[] field) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.hdel(key, field);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long hlen(byte[] key) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.hlen(key);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<byte[]> hkeys(byte[] key) {
//		Set<byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.hkeys(key);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Collection<byte[]> hvals(byte[] key) {
//		Collection<byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.hvals(key);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Map<byte[], byte[]> hgetAll(byte[] key) {
//		Map<byte[], byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.hgetAll(key);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long rpush(byte[] key, byte[] string) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.rpush(key, string);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long lpush(byte[] key, byte[] string) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.lpush(key, string);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long llen(byte[] key) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.llen(key);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public List<byte[]> lrange(byte[] key, int start, int end) {
//		List<byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.lrange(key, start, end);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String ltrim(byte[] key, int start, int end) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.ltrim(key, start, end);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public byte[] lindex(byte[] key, int index) {
//		byte[] result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.lindex(key, index);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String lset(byte[] key, int index, byte[] value) {
//		String result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.lset(key, index, value);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long lrem(byte[] key, int count, byte[] value) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.lrem(key, count, value);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public byte[] lpop(byte[] key) {
//		byte[] result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.lpop(key);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public byte[] rpop(byte[] key) {
//		byte[] result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.rpop(key);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long sadd(byte[] key, byte[] member) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.sadd(key, member);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<byte[]> smembers(byte[] key) {
//		Set<byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.smembers(key);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long srem(byte[] key, byte[] member) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.srem(key, member);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public byte[] spop(byte[] key) {
//		byte[] result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.spop(key);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long scard(byte[] key) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.scard(key);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Boolean sismember(byte[] key, byte[] member) {
//		Boolean result = false;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.sismember(key, member);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public byte[] srandmember(byte[] key) {
//		byte[] result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.srandmember(key);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zadd(byte[] key, double score, byte[] member) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zadd(key, score, member);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<byte[]> zrange(byte[] key, int start, int end) {
//		Set<byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrange(key, start, end);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zrem(byte[] key, byte[] member) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrem(key, member);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Double zincrby(byte[] key, double score, byte[] member) {
//		Double result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zincrby(key, score, member);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zrank(byte[] key, byte[] member) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrank(key, member);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zrevrank(byte[] key, byte[] member) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrank(key, member);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<byte[]> zrevrange(byte[] key, int start, int end) {
//		Set<byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrange(key, start, end);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<Tuple> zrangeWithScores(byte[] key, int start, int end) {
//		Set<Tuple> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrangeWithScores(key, start, end);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<Tuple> zrevrangeWithScores(byte[] key, int start, int end) {
//		Set<Tuple> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrangeWithScores(key, start, end);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zcard(byte[] key) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zcard(key);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Double zscore(byte[] key, byte[] member) {
//		Double result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zscore(key, member);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public List<byte[]> sort(byte[] key) {
//		List<byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.sort(key);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public List<byte[]> sort(byte[] key, SortingParams sortingParameters) {
//		List<byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.sort(key, sortingParameters);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zcount(byte[] key, double min, double max) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zcount(key, min, max);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<byte[]> zrangeByScore(byte[] key, double min, double max) {
//		Set<byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrangeByScore(key, min, max);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<byte[]> zrangeByScore(byte[] key, double min, double max, int offset, int count) {
//		Set<byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrangeByScore(key, min, max, offset, count);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<Tuple> zrangeByScoreWithScores(byte[] key, double min, double max) {
//		Set<Tuple> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrangeByScoreWithScores(key, min, max);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<Tuple> zrangeByScoreWithScores(byte[] key, double min, double max, int offset, int count) {
//		Set<Tuple> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrangeByScoreWithScores(key, min, max, offset, count);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<byte[]> zrevrangeByScore(byte[] key, double max, double min) {
//		Set<byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrangeByScore(key, max, min);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<byte[]> zrevrangeByScore(byte[] key, double max, double min, int offset, int count) {
//		Set<byte[]> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrangeByScore(key, max, min, offset, count);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<Tuple> zrevrangeByScoreWithScores(byte[] key, double max, double min) {
//		Set<Tuple> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrangeByScoreWithScores(key, max, min);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Set<Tuple> zrevrangeByScoreWithScores(byte[] key, double max, double min, int offset, int count) {
//		Set<Tuple> result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zrevrangeByScoreWithScores(key, max, min, offset, count);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zremrangeByRank(byte[] key, int start, int end) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zremrangeByRank(key, start, end);
//
//		} catch (Exception e) {
//
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long zremrangeByScore(byte[] key, double start, double end) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.zremrangeByScore(key, start, end);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Long linsert(byte[] key, LIST_POSITION where, byte[] pivot, byte[] value) {
//		Long result = null;
//		ShardedJedis shardedJedis = getRedisClient();
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//
//			result = shardedJedis.linsert(key, where, pivot, value);
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	@SuppressWarnings("deprecation")
//	public List<Object> pipelined(ShardedJedisPipeline shardedJedisPipeline) {
//		ShardedJedis shardedJedis = getRedisClient();
//		List<Object> result = null;
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.pipelined(shardedJedisPipeline);
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Jedis getShard(byte[] key) {
//		ShardedJedis shardedJedis = getRedisClient();
//		Jedis result = null;
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.getShard(key);
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Jedis getShard(String key) {
//		ShardedJedis shardedJedis = getRedisClient();
//		Jedis result = null;
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.getShard(key);
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public JedisShardInfo getShardInfo(byte[] key) {
//		ShardedJedis shardedJedis = getRedisClient();
//		JedisShardInfo result = null;
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.getShardInfo(key);
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public JedisShardInfo getShardInfo(String key) {
//		ShardedJedis shardedJedis = getRedisClient();
//		JedisShardInfo result = null;
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.getShardInfo(key);
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public String getKeyTag(String key) {
//		ShardedJedis shardedJedis = getRedisClient();
//		String result = null;
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.getKeyTag(key);
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Collection<JedisShardInfo> getAllShardInfo() {
//		ShardedJedis shardedJedis = getRedisClient();
//		Collection<JedisShardInfo> result = null;
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.getAllShardInfo();
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
//
//	public Collection<Jedis> getAllShards() {
//		ShardedJedis shardedJedis = getRedisClient();
//		Collection<Jedis> result = null;
//		if (shardedJedis == null) {
//			return result;
//		}
//
//		try {
//			result = shardedJedis.getAllShards();
//
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//
//		} finally {
//
//		}
//		return result;
//	}
}
